﻿<%@ page contentType="text/html;charset=utf-8"%><%@page import="java.io.*,
	java.io.*,
	java.util.*,
	java.net.*,
	javax.xml.parsers.*,
	org.apache.xml.serialize.*,
	javax.xml.transform.*,
	javax.xml.transform.dom.*,
	javax.xml.transform.stream.*,
	org.w3c.dom.*"%><%!

	// (메모리상의)XML 문서를 파일로 쓰기.
	// Input: XML 문서의 Root Element
	//        파일이 생성될 경로
	// Output: 없음.
	void writeXMLFile(Element rootElement, String filePath) throws Exception {
		XMLSerializer serializer = new XMLSerializer();
		serializer.setOutputByteStream(new FileOutputStream ( filePath ));
		serializer.serialize(rootElement);
	}

	// REST 방식의 OpenAPI 호출.
	// Input: keyword
	// Output: XML Stream
	InputStream callOpenAPI(String keyword) throws Exception {
		InputStream ret = null;

		// daum blog search
		String OPEN_API_URL = "http://openapi.naver.com/search";
		String API_KEY = "a05263025c221c3b15db9864921fea20";
		
		String serviceURL = OPEN_API_URL + "?key=" + API_KEY + "&target=blog&query=" + URLEncoder.encode(keyword, "UTF-8");

		// 디버깅용: 호출 URL 콘솔창에 출력.
		System.out.println("serviceURL-[" + serviceURL + "]");
		
		URL requestUrl = new URL(serviceURL);
		ret = requestUrl.openConnection().getInputStream();

		return ret;
	}

	// XML 문서 파싱.
	// Input: XML Stream
	// Output: XML 문서의 Root Element.
	Element parseDocument(InputStream is) throws Exception {
		Element ret = null;

		// 파서(Parser) 생성.
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder builder = factory.newDocumentBuilder();

		// XML 문서 파싱.
		Document document = builder.parse(is);

		ret = document.getDocumentElement();

		// 디버깅용.
		// XML 파일 생성하기.
		writeXMLFile(ret, "c:/search.xml");

		return ret;
	}
%><%
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html;charset=UTF-8");

	String keyword = request.getParameter("keyword");

	if (keyword != null) {
%>
	<table border=1>
		<tr><td>title</td><td>link</td></tr>
<%
		InputStream is = callOpenAPI(keyword);
		Element rootElement = parseDocument(is);

		//<item>
		//		   <title>Reds &lt;b&gt;Go&lt;/b&gt; Together</title>
		//		   <link>http://blog.naver.com/lobbyism? logNo=150002454045</link>
		//		   <description>... 영원한 승리자 그들을 위해~ 워~ </description>
		//			<bloggername>서남</bloggername>
		//		   <bloggerlink>http://blog.naver.com/suhsoonam</bloggerlink>
		//</item>
		NodeList result = rootElement.getElementsByTagName("item");
		int count = result.getLength();
		for(int i = 0; i < count; i++) {
			Node item = result.item(i);
			NodeList itemChildNodeList = item.getChildNodes();
			Node title = itemChildNodeList.item(0);
			Node titleValue = title.getChildNodes().item(0);
			out.println("<tr><td>" + titleValue.getNodeValue() + "</td>");

			Node link = item.getChildNodes().item(1).getChildNodes().item(0);
%>
			<td><a href="<%=link.getNodeValue()%>" target=_blank>바로가기</a></td></tr>
<%
		}
%>
	</table>
<%
	}
	else {
	}
%>
